import AlipaySdk from 'alipay-sdk'

// 支付宝沙箱环境配置
const alipayConfig = {
  // 沙箱环境网关
  gateway: 'https://openapi.alipaydev.com/gateway.do',
  // 应用ID（沙箱环境中的APPID）
  appId: 'your_sandbox_app_id',
  // 应用私钥（开发者自己生成的私钥）
  privateKey: 'your_private_key',
  // 支付宝公钥（沙箱环境中生成的支付宝公钥）
  alipayPublicKey: 'your_alipay_public_key',
  // 签名类型
  signType: 'RSA2',
  // 字符集
  charset: 'utf-8',
  // 版本
  version: '1.0'
}

// 初始化支付宝SDK
const alipay = new AlipaySdk(alipayConfig)

/**
 * 创建订单并发起支付
 * @param {Object} orderData 订单信息
 * @param {string} orderData.outTradeNo 商户订单号
 * @param {number} orderData.totalAmount 订单总金额
 * @param {string} orderData.subject 订单标题
 * @returns {Promise} 支付结果
 */
export function createAlipayOrder(orderData) {
  const { outTradeNo, totalAmount, subject } = orderData
  
  // 构造支付参数
  const params = {
    bizContent: {
      outTradeNo,
      totalAmount: totalAmount.toString(),
      subject,
      productCode: 'FAST_INSTANT_TRADE_PAY' // 销售产品码，目前沙箱只支持这一种
    }
  }
  
  // 调用支付宝统一下单接口
  return alipay.exec('alipay.trade.page.pay', params, {
    // 支付成功后的回调地址（需要外网可访问）
    returnUrl: 'https://your-domain.com/return',
    // 支付结果异步通知地址（需要外网可访问）
    notifyUrl: 'https://your-domain.com/notify'
  }).then(result => {
    // 返回支付表单
    return result
  }).catch(error => {
    console.error('创建支付宝订单失败:', error)
    throw error
  })
}

/**
 * 验证支付宝异步通知
 * @param {Object} params 支付宝异步通知参数
 * @returns {Promise} 验证结果
 */
export function verifyAlipayNotification(params) {
  return alipay.checkNotifySign(params).then(result => {
    return result
  }).catch(error => {
    console.error('验证支付宝通知失败:', error)
    throw error
  })
}

/**
 * 查询订单状态
 * @param {string} outTradeNo 商户订单号
 * @returns {Promise} 订单状态
 */
export function queryAlipayOrder(outTradeNo) {
  const params = {
    bizContent: {
      outTradeNo
    }
  }
  
  return alipay.exec('alipay.trade.query', params).then(result => {
    return result
  }).catch(error => {
    console.error('查询支付宝订单失败:', error)
    throw error
  })
}

/**
 * 关闭订单
 * @param {string} outTradeNo 商户订单号
 * @returns {Promise} 关闭结果
 */
export function closeAlipayOrder(outTradeNo) {
  const params = {
    bizContent: {
      outTradeNo
    }
  }
  
  return alipay.exec('alipay.trade.close', params).then(result => {
    return result
  }).catch(error => {
    console.error('关闭支付宝订单失败:', error)
    throw error
  })
}